"""
@author: xyl
@file: lianxi.py
@time: 2022/11/25 15:48
"""
#1、输入数字n，输出n天前的日期（time或者datatime模块）
# import datetime
# n = input("请输入要查询几天前的日期：")
# date1 = (datetime.datetime.now() - datetime.timedelta(int(n)))
# date1 = date1.strftime("%Y-%m-%d")
# print(date1)

#2、输出指定文件夹下有哪些文件或文件夹（实现ls命令， os）
# import os
# # 打开文件
# path = "D:/2022newproject/2022-11-24-模块和包/"
# dirs = os.listdir(path)
# # 输出所有文件和文件夹
# for file in dirs:
#    print(file)

#3、列表去重，并且从小到大排序
# lst = [3, 12, 32, 42, 1, 43, 12, 43, 24, 32]
# lst1 = list(set(lst))
# lst1.sort()
# print(lst1)

#4、如何在一个函数内部修改全局变量
# a = 20
# def name(x):
#    print(x)
#    global a
#    a = 30
# name(a)
# print(a)

#5、如何跨模块共享全局变量
#   把全局变量都写在一个模块文件中，
#   使用的时候导入即可

#6、python的基本数据类型有哪些？
#   整数、浮点数、复数、字符串、布尔、NoneType、列表、元组、字典、集合

#7、python中生成随机整数（1-10），随机小数（1-10），随机小数（0-1）的方法
# import random
# a = random.randint(1,10)
# print(a)
# b = random.uniform(1,10)
# print('%.2f'%b)
# c = random.random()
# print('%.2f'%c)

#8、python中哪些是可变数据类型，哪些是不可变数据类型
# 可变数据类型：列表list，字典dict，集合set
# 不可变数据类型：整型int，浮点型float，字符串string，元组tuple

#9、a+=1与a=a+1有什么区别
# a+=1：
#     1、首先 += ：python底层调用__iadd__()方法
#     2、对于不可变对象：进行+=操作后，在栈中重新创建了新的对象。
#     3、对于可变对象：不会在栈中重新创建新的对象。
# a=a+1：
#     1、首先 + ：python底层调用__add__()方法
#     2、不可变对象：栈中重新创建新对象。
#     3、可变对象：在栈中重新创建新对象

#10、什么是pep8？说出5点它的标准
# 1.使用四个空格缩进，而不是制表符
# 2.如果可以，尽量注释独占一行
# 3.每一行代码控制在 80 字符以内
# 4.使用有意义的，英文单词或词组命名变量，绝对不要使用汉语拼音
# 5.所有 import 尽量放在文件开头，在 docstring 下面，其他变量定义的上面

#11、给定一个字符串，找出字符串第一个重复的字符
# str1 = input('请输入一个字符串：')
# str2 = ''
# for i in str1:
#     if i in str2:
#         print(f'第一个重复的字符为{i}')
#         break
#     str2 = str2 + i

#12、简述深拷贝与浅拷贝
# 深拷贝:拷贝的程度深，自己新开辟了一块内存，将被拷贝内容全部拷贝过来了；
# 浅拷贝:拷贝的程度浅，只拷贝原数据的首地址，然后通过原数据的首地址，去获取内容。
# 只有在容器类型里面包含可变数据类型的时候,深浅拷贝会造成不同的影响
# 浅拷贝之后的数据改变,可能会影响原来的数据
# 深拷贝之后的数据改变,不会影响原来数据
# 因为,浅拷贝只拷贝容器类型里的第一层数据地址
# 而深拷贝会拷贝里面的每一层的值

#13、简述python内存机制
# 以引用计数为主，分代回收和标记清除为辅的垃圾回收方式
# 对[-5, 256]的小整数创建小整数池，可以直接用
# 对使用过的简单字符串存放在简单字符串驻留区

#14、使用python实现冒泡排序，快速排序
# 冒泡排序
# lst = [3, 32, 42, 1, 43, 12, 24]
# for i in range(len(lst)-1):
#    for j in range(len(lst)-1-i):
#       if lst[j] > lst[j+1]:
#          lst[j], lst[j+1] = lst[j+1], lst[j]
# print(lst)

# 快速排序
# def get_mid(nums, low, high):
#    mid = nums[low]
#    i = low
#    j = high
#    while i < j:
#       while i < j and nums[j] >= mid:
#          j -= 1
#       nums[i] = nums[j]
#       while i < j and nums[i] < mid:
#          i += 1
#       nums[j] = nums[i]
#       nums[i] = mid
#    return i
#
# def quick_sort(arr, low, high):
#    if len(arr) <= 1:
#       return arr
#    else:
#       if low < high:
#          pi = get_mid(arr, low, high)
#          quick_sort(arr, low, pi - 1)
#          quick_sort(arr, pi + 1, high)
#          return arr
# lst = [3, 32, 42, 1, 43, 12, 24]
# print(quick_sort(lst, 0, len(lst)-1))

#15、验证一个字符串是否属于回文（从左到右，从右到左都是一样）
# str1 = "xyabcd123321dcbayx"
# if str1 == str1[::-1]:
#     print("是回文")
# else:
#     print("不是回文")